#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
using namespace std;
//int dx[4] = { 0,0,1,-1 }, dy[4] = { 1,-1,0,0 };
//int m, n;
//int precolor;
//void dfs(vector<vector<int>>& image,int i,int j,int color)
//{
//	for (int k = 0; k < 4; k++)
//	{
//		int x = i + dx[k], y = j + dy[k];
//		if (x >= 0 && x < m && y >= 0 && y < n &&
//			image[x][y] == precolor)
//		{
//			image[x][y] = color;
//			dfs(image, x, y, color);
//		}
//	}
//}
//vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
//	if (image[sr][sc] == color) return image;
//	m = image.size(), n = image[0].size();
//	precolor = image[sr][sc];
//	image[sr][sc] = color;
//	dfs(image,sr,sc,color); 
//	return image;
//}
//int ret;
//int m, n;
//vector<vector<bool>> visited;
//int dx[4] = { 0,0,1,-1 }, dy[4] = {1,-1,0,0};
//void dfs(vector<vector<char>>& grid,int i,int j)
//{
//	for (int k = 0; k < 4; k++)
//	{
//		int x = i + dx[k], y = j + dy[k];
//		if (x >= 0 && x < m && y >= 0 && y < n &&
//			visited[x][y] == false && grid[x][y] == '1')
//		{
//			visited[x][y] = true;
//			dfs(grid, x, y);
//		}
//	}
//}
//int numIslands(vector<vector<char>>& grid) {
//	m = grid.size(), n = grid[0].size();
//	visited.resize(m, vector<bool>(n));
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			if (grid[i][j] == '1' && visited[i][j] == false)
//			{
//				visited[i][j] = true;
//				ret++;
//				dfs(grid,i,j);
//			}
//		}
//	}
//	return ret;
//}
//vector<vector<bool>> visited;
//int m, n;
//int path;
//int dx[4] = { 0,0,1,-1 }, dy[4] = { 1,-1,0,0 };
//void dfs(vector<vector<int>>& grid, int i, int j)
//{
//	for (int k = 0; k < 4; k++)
//	{
//		int x = i + dx[k], y = j + dy[k];
//		if (x >= 0 && x < m && y >= 0 && y < n &&
//			visited[x][y] == false && grid[x][y] == 1)
//		{
//			path++;
//			visited[x][y] = true;
//			dfs(grid, x, y);
//		}
//	}
//}
//int maxAreaOfIsland(vector<vector<int>>& grid) {
//	m = grid.size(), n = grid[0].size();
//	visited.resize(m, vector<bool>(n));
//	int ret=0;
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			if (grid[i][j] == 1 && visited[i][j] == false)
//			{
//				visited[i][j] = true;
//				dfs(grid,i,j);
//				ret = max(ret, path);
//				path = 0;
//			}
//		}
//	}
//	return ret;
//}
//int m, n;
//int dx[4] = { 0,0,1,-1 }, dy[4] = { 1,-1,0,0 };
//void dfs(vector<vector<char>>& board,int i,int j)
//{
//	for (int k = 0; k < 4; k++)
//	{
//		int x = i + dx[k], y = j + dy[k];
//		if (x >= 0 && x < m && y >= 0 && y < n &&
//			board[x][y] == 'O')
//		{
//			board[x][y] = '.';
//			dfs(board, x, y);
//		}
//	}
//}
//void solve(vector<vector<char>>& board) {
//	m = board.size(), n = board[0].size();
//	for (int i = 0; i < n; i++)
//	{
//		if (board[0][i] == 'O')
//			dfs(board,0,i);
//		if (board[m-1][i] == 'O')
//			dfs(board,m-1,i);
//	}
//	for (int i = 0; i < m; i++)
//	{
//		if (board[i][0] == 'O')
//			dfs(board, i, 0);
//		if (board[i][n-1] == 'O')
//			dfs(board, i, n-1);
//	}
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			if (board[i][j] == 'O')
//				board[i][j] = 'X';
//			if (board[i][j] = '.')
//				board[i][j] = 'O';
//		}
//	}
//}
//vector<vector<int>> ret;
//int m, n;
//int dx[4] = { 0,0,1,-1 }, dy[4] = { 1,-1,0,0 };
//vector<vector<bool>> visited;
//bool dfs1(vector<vector<int>>& heights,int i,int j)
//{
//	if (i == 0 || j == 0) return true;
//	for (int k = 0; k < 4; k++)
//	{
//		int x = i + dx[k], y = j + dy[k];
//		if (x >= 0 && x < m && y >= 0 && y < n &&
//			visited[x][y] == false && heights[i][j] >= heights[x][y])
//		{
//			visited[x][y] = true;
//			if (dfs1(heights, x, y))
//				return true;
//			visited[x][y] = false;
//		}
//	}
//	return false;
//}
//bool dfs2(vector<vector<int>>& heights, int i, int j)
//{
//	if (i == m-1 || j == n-1) return true;
//	for (int k = 0; k < 4; k++)
//	{
//		int x = i + dx[k], y = j + dy[k];
//		if (x >= 0 && x < m && y >= 0 && y < n &&
//			visited[x][y] == false && heights[i][j] >= heights[x][y])
//		{
//			visited[x][y] = true;
//			if (dfs2(heights, x, y))
//				return true;
//			visited[x][y] = false;
//		}
//	}
//	return false;
//}
//vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {
//	m = heights.size(), n = heights[0].size();
//	visited.resize(m, vector<bool>(n));
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			visited[i][j] = true;
//			if (dfs1(heights,i,j)&&dfs2(heights,i,j))
//				ret.push_back({ i,j });
//			visited[i][j] = false;
//		}
//	}
//	return ret;
//}
//int m, n;
//int dx[4] = { 0,0,1,-1 };
//int dy[4] = { 1,-1,0,0 };
//void dfs(vector<vector<int>>& heights, int i, int j, vector<vector<bool>>& visited)
//{
//	visited[i][j] = true;
//	for (int k = 0; k < 4; k++)
//	{
//		int x = i + dx[k], y = j + dy[k];
//		if (x >= 0 && x < m && y >= 0 && y < n &&
//			visited[x][y] == false && heights[i][j] <= heights[x][y])
//		{
//			dfs(heights, x, y, visited);
//		}
//	}
//}
//vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {
//	m = heights.size(), n = heights[0].size();
//	vector<vector<bool>> pac(m, vector<bool>(n));
//	vector<vector<bool>> ant(m, vector<bool>(n));
//	for (int i = 0; i < n; i++) dfs(heights, 0, i, pac);
//	for (int i = 0; i < m; i++) dfs(heights, i, 0, pac);
//	for (int i = 0; i < n; i++) dfs(heights, m - 1, i, ant);
//	for (int i = 0; i < m; i++) dfs(heights, i, n - 1, ant);
//	vector<vector<int>> ret;
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			if (pac[i][j] && ant[i][j])
//				ret.push_back({ i,j });
//		}
//	}
//	return ret;
//}
//int m, n;
//int dx[8] = { 0,0,1,-1,1,1,-1,-1 };
//int dy[8] = { 1,-1,0,0,1,-1,1,-1 };
//void dfs(vector<vector<char>>& board, int i, int j)
//{
//	int count = 0;
//	for (int k = 0; k < 8; k++)
//	{
//		int x = i + dx[k], y = j + dy[k];
//		if (x >= 0 && x < m && y >= 0 && y < n &&
//			board[x][y] == 'M')
//			count++;
//	}
//	if (count)
//	{
//		board[i][j] = count + '0';
//	}
//	else
//	{
//		board[i][j] = 'B';
//		for (int k = 0; k < 8; k++)
//		{
//			int x = i + dx[k], y = j + dy[k];
//			if (x >= 0 && x < m && y >= 0 && y < n &&
//				board[x][y] == 'E')
//				dfs(board, x, y);
//		}
//	}
//}
//vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
//	m = board.size(), n = board[0].size();
//	int x = click[0], y = click[1];
//	if (board[x][y] == 'M')
//	{
//		board[x][y] = 'X';
//		return board;
//	}
//	dfs(board, x, y);
//	return board;
//}
int ret;
int dx[4] = { 0,0,1,-1 }, dy[4] = { 1,-1,0,0 };
vector<vector<bool>> visited;
int _m, _n,_cnt;
int getsum(int x)
{
	int sum = 0;
	while (x)
	{
		sum += x % 10;
		x /= 10;
	}
	return sum;
}
void dfs(int i,int j)
{
	visited[i][j] = true;
	for (int k = 0; k < 4; k++)
	{
		int x = i + dx[k], y = j + dy[k];
		if (x >= 0 && x < _m && y >= 0 && y < _n &&
			visited[x][y]==false && getsum(x) + getsum(y) <= _cnt)
		{
			ret++;
			dfs(x, y);
		}
	}
}
int wardrobeFinishing(int m, int n, int cnt) {
	_m = m, _n = n,_cnt=cnt;
	visited.resize(m, vector<bool>(n));
	dfs(0,0);
	return ret;
}
int main()
{

	return 0;
}